package org.rails.core.db.table;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.rails.core.util.Utils;

/**
 * 命名法转换
 * @author jack
 *
 */
public class NameUtils {
	
	/**
	 * 转换为下划线命名。
	 * @param name 输入的名称。
	 * @return 根据下划线命名法规则转换而成的名称。
	 */
	public static String toUnderName(final String name) {
		final String regex = "([A-Z]{1}[a-z]+)|(\\d+)|([a-z]+)|([A-Z]+)|(^_{1})";
		final Pattern p = Pattern.compile(regex);
		final Matcher m = p.matcher(name);
		final StringBuffer underName = new StringBuffer();
		if (m.find()) {
			if(!m.group().equals("_"))
				underName.append(m.group().toLowerCase());
			while (m.find()) {
				underName.append("_").append(m.group().toLowerCase());
			}
		}
		return underName.toString();
	}

	/**
	 * 转换为帕斯卡命名。
	 * @param name 输入的名称。
	 * @return 根据帕斯卡命名法规则转换而成的名称。
	 */
	public static String toPascalName(final String name) {
		final Pattern p = Pattern.compile("([A-Z]{1}[a-z]+)|([a-z]+)|([0-9]+)|([A-Z]+)");
		final Matcher m = p.matcher(name);
		final StringBuffer camelName = new StringBuffer();
		while (m.find()) {
		    final String g = m.group().toUpperCase();
		    camelName.append(g.substring(0, 1).toUpperCase().concat(
					g.substring(1).toLowerCase()));	
			
		}
		return camelName.toString();
	}
	
	/**
	 * 转换为骆驼命名。
	 * @param name 输入的名称。
	 * @return 根据骆驼命名法规则转换而成的名称。
	 */
	public static String toCamelName(final String name){
		String pasName = toPascalName(name);
		if(!Utils.isEmpty(pasName))
			return pasName.substring(0,1).toLowerCase() + pasName.substring(1);
		else
			return name;
	}

}
